package com.example.springcloudgatewayexample;

import org.springframework.cloud.gateway.route.RouteLocator;
import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class GatewayRoutes {
    @Bean
    public RouteLocator routeLocator(RouteLocatorBuilder builder) {
        return builder.routes()
                .route(r -> r.path("/student/**", "/a/b/**", "/api/**")
                                // stripPrefix /a/b/*** 转发，则为 /***
                                // .filters(f -> f.stripPrefix(2))
                                .filters(f -> f.prefixPath("/api"))
                                .uri("http://localhost:8080/")
                        // .order(0)
                        // .id("my-router")
                        // .uri("http://spring-boot-zuulgatwayproxy-student-service:8080/")
                )
                .build();
    }

    // @Bean
    // public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
    //     return builder.routes()
    //             .route("path_route", r -> r.path("/get")
    //                     .uri("http://httpbin.org"))
    //             .route("host_route", r -> r.host("*.myhost.org")
    //                     .uri("http://httpbin.org"))
    //             .route("rewrite_route", r -> r.host("*.rewrite.org")
    //                     .filters(f -> f.rewritePath("/foo/(?<segment>.*)", "/${segment}"))
    //                     .uri("http://httpbin.org"))
    //             .route("hystrix_route", r -> r.host("*.hystrix.org")
    //                     .filters(f -> f.hystrix(c -> c.setName("slowcmd")))
    //                     .uri("http://httpbin.org"))
    //             .route("hystrix_fallback_route", r -> r.host("*.hystrixfallback.org")
    //                     .filters(f -> f.hystrix(c -> c.setName("slowcmd").setFallbackUri("forward:/hystrixfallback")))
    //                     .uri("http://httpbin.org"))
    //             .route("limit_route", r -> r
    //                     .host("*.limited.org").and().path("/anything/**")
    //                     .filters(f -> f.requestRateLimiter(c -> c.setRateLimiter(redisRateLimiter())))
    //                     .uri("http://httpbin.org"))
    //             .build();
    // }
}
